package com.qili.util;

import org.apache.commons.lang3.CharUtils;
import org.apache.commons.lang3.StringUtils;
import java.util.Arrays;
import java.util.List;

/**
 * 字符串工具类
 *
 * @author 王帆
 * @date 2017-11-10 上午11:03:50
 */
public class StringUtil {

    /**
     * 是否为空
     *
     * @param str
     * @return
     */
    public static boolean isBlank(String str) {
        if (str == null || str.isEmpty() || str.replaceAll(" ", "").isEmpty()) {
            return true;
        }
        return false;
    }

    public static boolean isBlank(String... strs) {
        for (int i = 0; i < strs.length; i++) {
            if (isBlank(strs[i])) {
                return true;
            }
        }
        return false;
    }

    public static boolean isNotBlank(String str) {
        return !isBlank(str);
    }

    public static boolean contains(String str, String key) {
        if (str != null && str.contains(key)) {
            return true;
        }
        return false;
    }

    public static boolean contains(String... strs) {
        for (int i = 0; i < strs.length - 1; i++) {
            if (contains(strs[i], strs[strs.length - 1])) {
                return true;
            }
        }
        return false;
    }

    public static boolean contains(String[] strs, String key) {
        for (int i = 0; i < strs.length; i++) {
            if (contains(strs[i], key)) {
                return true;
            }
        }
        return false;
    }

    /**
     * 首字母大写
     *
     * @param in
     * @return
     */
    public static String upperHeadChar(String in) {
        String head = in.substring(0, 1);
        String out = head.toUpperCase() + in.substring(1, in.length());
        return out;
    }

    public   static List<String> split(String string) {
        return Arrays.asList(string.split(","));
    }


    /**
     * 获取下一个相似结构的字符串
     * @param str       任意以数字结尾的字符串      **234    ->    **235    **9999 -> **10000   **056 -> **057
     * @return      如果不是以数字结尾,那么返回原值
     */
    public static String getNextOne(String str){
        if(StringUtils.isNotBlank(str) && CharUtils.isAsciiAlphanumeric(str.charAt(str.length()-1))){
            String back = str.replaceAll(".*[^\\d](?=(\\d+))","");
            String front = str.replaceAll(back,"");
            System.out.println(back);
            System.out.println(front);
            Integer newBack = Integer.valueOf(back)+1;
            return front+newBack;
        }
        return str;
    }

    /**
     * 不够位数的在前面补0，保留num的长度位数字
     * 例如  (1,4)返回   0001
     * @param code
     * @return
     */
    public static String autoGenericCode(String code, int num) {
        String result = "";
        // 保留num的位数
        // 0 代表前面补充0
        // num 代表长度为4
        // d 代表参数为正数型
        result = String.format("%0" + num + "d", Integer.parseInt(code));
        return result;
    }

    /**
     * 获取真实长度,中文两个字符,英文一个字符
     * @param str
     * @return
     */
    public static int getRealLength(String str){
        int valueLength = 0;
        String chinese = "[\u4e00-\u9fa5]";
        for (int i = 0; i < str.length(); i++) {
            String temp = str.substring(i, i + 1);
            if (temp.matches(chinese)) {
                valueLength += 2;
            } else {
                valueLength += 1;
            }
        }
        return valueLength;
    }

    public static boolean isNumeric(final String str) {
        // null or empty
        if (str == null || str.length() == 0) {
            return false;
        }
        return str.chars().allMatch(Character::isDigit);
    }
}
